package com.zzf.concurrent.example.join;

import com.zzf.concurrent.example.util.TimeUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * @author GaoFeng2017
 * @date 2019/8/5 18:00
 */
@Slf4j
public class JoinExample {

    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                log.info("{} -> {}", Thread.currentThread().getName(), i);
            }
        });

        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                log.info("{} -> {}", Thread.currentThread().getName(), i);
                TimeUtil.sleep(10);
            }
        });

        t1.start();
        t2.start();

        // t1和t2会交替执行，主线程会等待t1和t2线程结束后才继续执行。
        try {
            // 让主线程等待t1线程结束，此时主线程处于blocked状态
            t1.join();
            // 让主线程等待t2线程结束，如果等待时间超过100ms，则恢复主线程为runnable状态
            t2.join(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        log.info("everything to be finish");

        // 场景
        // 多任务采集，统计返回处理，每个采集任务所花费的时间不一样。
    }

}
